﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using ExcelDna.Integration.CustomUI;
using System.Windows.Forms;
using ExcelDna.Integration;
using Microsoft.Office.Interop.Excel;
using ExcelDna.IntelliSense;
// TODO:   按照以下步骤启用功能区(XML)项: 

// 1. 将以下代码块复制到 ThisAddin、ThisWorkbook 或 ThisDocument 类中。

//  protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
//  {
//      return new Ribbon1();
//  }

// 2. 在此类的“功能区回调”区域中创建回调方法，以处理用户
//    操作(如单击某个按钮)。注意: 如果已经从功能区设计器中导出此功能区，
//    则将事件处理程序中的代码移动到回调方法并修改该代码以用于
//    功能区扩展性(RibbonX)编程模型。

// 3. 向功能区 XML 文件中的控制标记分配特性，以标识代码中的相应回调方法。  

// 有关详细信息，请参见 Visual Studio Tools for Office 帮助中的功能区 XML 文档。


namespace ExcelUDF
{
    [ComVisible(true)]
    public class Ribbon1 : ExcelRibbon
    {
        public void AutoOpen()
        {
            IntelliSenseServer.Register();
        }

        public void AutoClose()
        {
        }
        public override object LoadImage(string imageName)
        {
            object obj = Resource1.ResourceManager.GetObject(imageName);
            return ((System.Drawing.Bitmap)(obj));
        }


        public void OnTestRun_Click(IRibbonControl control)
        {
          var result= Common.xlApp.Run("GetSubFolders", @"E:\百度云同步盘\2016年项目", "", "", "H");

        }

        public void OnFomularResize_Click(IRibbonControl control)
        {
            Common.xlApp.ScreenUpdating = false;
            try
            {
                Range selectRange = Common.xlApp.Selection;
                //获取要处理的包含公式的单元格，已经是数据公式的只处理首个单元格
                List<Range> firstRangeOfFormularArrays = FormularResizeManager.GetRangeOfFormular(selectRange);
                foreach (Range rngItem in firstRangeOfFormularArrays)
                {
                    FormularResizeManager formularRM = new FormularResizeManager() { SrcRangeItem = rngItem};
                    formularRM.RizeFormularArrayRange();
                }

            }
            catch (Exception e)
            {
                MessageBox.Show($"扩展公式出错，出错原因为：\r\n{e.Message}");
            }
            finally
            {
                Common.xlApp.ScreenUpdating = true;
            }
            //MessageBox.Show("OnFomularResize_Click");
        }

        public void OnFomularDelete_Click(IRibbonControl control)
        {
            Common.xlApp.ScreenUpdating = false;
            try
            {
                Range selectRange = Common.xlApp.Selection;
                foreach (Range item in selectRange.Cells)
                {
                    //当单元格为数组公式一部分时
                    if (item.HasArray)
                    {
                        item.CurrentArray.ClearContents();
                    }
                    else
                    {
                        item.ClearContents();
                    }

                }
            }
            catch (Exception e)
            {
                MessageBox.Show($"公式删除出错，出错原因为：\r\n{e.Message}");
            }
            finally
            {
                Common.xlApp.ScreenUpdating = true;
            }
        }

        public void OnFomularValue_Click(IRibbonControl control)
        {
            Common.xlApp.ScreenUpdating = false;
            try
            {
                Range selectRange = Common.xlApp.Selection;
                foreach (Range item in selectRange.Cells)
                {
                    //当单元格为数组公式一部分时
                    if (item.HasArray)
                    {
                        item.CurrentArray.Value2= item.CurrentArray.Value2;
                    }
                    else
                    {
                        item.Value2 = item.Value2;
                    }

                }
            }
            catch (Exception e)
            {
                MessageBox.Show($"公式数值化出错，出错原因为：\r\n{e.Message}");
            }
            finally
            {
                Common.xlApp.ScreenUpdating = true;
            }
        }


    }
}
